package toepen;

import java.util.Random;

// <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
// #[regen=yes,id=DCE.A48A9C3E-7995-049E-7735-390107BDBC2A]
// </editor-fold>
/**
 * Iemand die meedoet aan een spel
 * @author LucasD
 */
public class Deelnemer {

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.DA6A127B-B5B8-F6A6-D98E-358C3D6152B0]
    // </editor-fold>
    /**
     * De actuele speelhand van de speler. Vuile was (kandidaat) is dit dus niet
     */
    private Hand speelHand;

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,id=DCE.4E207573-3111-C257-3FA6-6548C6FCC20B]
    // </editor-fold>
    /**
     * Het aantal strafpunten op dit moment voor de deelnemer
     */
    private int strafPunten;
    private int Inzet;
    private String naam;
    private boolean isAanDeBeurt;
    private boolean isActief;

    /**
     * Constructor voor een deelnemer
     * @param naam van de deelnemer
     */
    public Deelnemer(String naam) {
        this.naam=naam;
        this.isAanDeBeurt = false;
        this.isActief = true;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.9B033A70-60D2-1B5B-E2F8-3B4FAE1F8460]
    // </editor-fold>
    /**
     * @return hand waarmee gespeeld wordt
     */
    public Hand getSpeelHand () {
        return speelHand;
    }

    /**
     * Zet de hand waarmee de deelnemer speelt
     * @param hand
     */
    public void setSpeelHand (Hand hand) {
        this.speelHand = hand;
    }

    // <editor-fold defaultstate="collapsed" desc=" UML Marker "> 
    // #[regen=yes,regenBody=yes,id=DCE.A1F49CFA-D067-ED3F-704B-70E345A4BFDA]
    // </editor-fold>
    /**
     * @return het aantal strafpunten
     */
    public int getStrafPunten () {
        return strafPunten;
    }

    /**
     * Zet het aantal strafpunten
     * @param strafPunten voor deze deelnemer
     */
    public void setStrafPunten (int strafPunten) {
        this.strafPunten = strafPunten;
    }

    /**
     * Zet de deelnemer op inactief
     */
    public void setInactief () {
        this.isActief = false;
    }

    /**
     * @return true als de deelnemer actief is
     */
    public boolean getIsActief() {
        return this.isActief;
    }

    /**
     * Zet de inzet
     * @param inzet
     */
    public void setInzet(int inzet) {
        this.Inzet = inzet;
    }

    /**
     * @return inzet
     */
    public int getInzet() {
        return this.Inzet;
    }

    /**
     * @return true als deze deelnemer aan de beurt is
     */
    public boolean getIsAanDeBeurt() {
        return this.isAanDeBeurt;
    }

    /**
     * Zet de speler aan de beurt als deze niet aan de beurt is.
     * Wisselt de waarde van aan de beurt om.
     */
    public void switchIsAanDeBeurt() {
        this.isAanDeBeurt = !this.isAanDeBeurt;
    }

    /**
     * Controleert of deze kaart van de juiste kleur is door dit op de vragen bij
     * de speelbeurt
     * @param kaart die gespeeld gaat worden
     * @return true als de kleur klopt
     */
    private boolean checkKleurBekennen(Kaart kaart)
    {
        return SpeelBeurt.getSpeelBeurt().getSpelregelKleurBekennen(kaart);
    }

    /**
     * De deelnemer start zijn beurt door een kaart te spelen
     * @param kaart die deze probeert te spelen
     * @throws java.lang.Exception als de kaart niet van de deelnemer is of als
     * deze niet van de juiste kleur is
     */
    public void startDeelnemerBeurt(Kaart kaart) throws Exception
    {
        boolean nietgevonden=true;
        //TODO: implement startDeelnemerBeurt
//           Kaart winnendeKaart = kaart;
//
        for (int i=0;i<speelHand.getNietGespeeldeKaarten().size()&&nietgevonden;i++)
        {
            if(speelHand.getNietGespeeldeKaarten().get(i).getKleur()==kaart.getKleur())
            {
                if (speelHand.getNietGespeeldeKaarten().get(i).getWaarde()==kaart.getWaarde())
                {
                    nietgevonden=false;
                    kaart=speelHand.getNietGespeeldeKaarten().get(i);
                }
            }
        }
        if (nietgevonden)
         {
            throw new Exception("Geen kaart van deze deelnemer");
         }
          else
          {
            //TODO: voorwaarde
            if( !checkKleurBekennen (kaart) )
         {
             throw new Exception("Je moet kleur bekennen");
         }
            else
            {
            speelHand.setGespeeldeKaart(kaart);
           // SpeelBeurt.getSpeelBeurt().setAntwoord(Antwoord.KAART);
            SpeelBeurt.getSpeelBeurt().checkKaart(kaart);
            SpeelBeurt.getSpeelBeurt().eindeBeurt();
            }
          }
       }

    /**
     * @return de naam van de deelnemer
     */
    public String getNaam()
    {
        return naam;
    }
}